﻿using Com.CMB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Light.CMB
{
    /// <summary>
    /// 功能：招商银行支付接口
    /// 版本：3.4
    /// 修改日期：2016-10-17
    /// 说明：
    /// 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
    /// 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
    /// 
    /// /////////////////注意///////////////////////////////////////////////////////////////
    /// 如果您在接口集成过程中遇到问题，可以按照下面的途径来解决
    /// 1、开发文档中心（http://58.61.30.110/openapi/PWDPay/api/checkcode.aspx）
    /// 2、商户校证码（http://58.61.30.110/openapi/PWDPay/api/checkcode.aspx）
    /// 3、查找手机验证码（http://61.144.248.29:801/GetMsgVerifyCode/Default.aspx）
    /// 如果不想使用扩展功能请把扩展功能参数赋空值。
    /// </summary>
    public class CMBPay
    {
        /// <summary>
        /// 建立支付
        /// </summary>
        /// <param name="BranchID"> 商户开户分行号，必填</param>
        /// <param name="CoNo">商户号，必填</param>
        /// <param name="MerchantPara">支付结果通知命令页面携带的参数（格式：Ref1=12345678|Ref2=ABCDEFG|Ref3=HIJKLM），必填</param>
        /// <param name="MerchantRetPara">支付成功返回页面携带的参数（格式：Ref1=12345678|Ref2=ABCDEFG|Ref3=HIJKLM）</param>
        /// <param name="Total_Fee">支付的金额，必填</param>
        /// <param name="PayKey">商户秘钥，必填</param>
        /// <param name="PNo">客户协议号，必填</param>
        /// <param name="MchNo">协议商户企业编号，必填</param>
        /// <param name="Mobile">协议手机号</param>
        /// <param name="Para">协议开通结果通知命令参数</param>
        /// <param name="Longitude">地理位置 经度</param>
        /// <param name="Dimension">地理位置 纬度</param>
        /// <param name="strKey">商户密钥 ,测试环境为空</param>
        /// <param name="BindCardPara">签约回调页面携带的参数</param>
        /// <param name="PayerID">付款方用户标识</param>
        /// <param name="PayeeID">收款方的用户标识</param>
        /// <returns>建立请求</returns>
        public string Pay(string BranchID, string CoNo, string MerchantPara, string MerchantRetPara, string Total_Fee, string PayKey, string PNo, string MchNo, string Mobile,
            string Para, string Longitude, string Dimension, string strKey, string BindCardPara, string PayerID, string PayeeID)
        {
            SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
            string strDate= DateTime.Now.ToString("yyyyMMdd");
            string strBillNo=DateTime.Now.Ticks.ToString().Substring(8, 10);//订单号暂时自动生成
            string MerchantUrl=Config.CMB_PayCallBackUrl;
            string BindCardUrl=Config.CMB_BindCardUrl;
            string MerchantCode = Core.GetMerchantCode(strKey, strDate, BranchID, CoNo, strBillNo, Total_Fee, MerchantPara, MerchantUrl, PNo, MchNo, BindCardUrl, BindCardPara, Mobile, Longitude, Dimension, PayerID, PayeeID);
            //开户分行号，必填
            sParaTemp.Add("BranchID", BranchID);
            //商户号，必填
            sParaTemp.Add("Cono", CoNo);
            //订单号
            sParaTemp.Add("BillNo", strBillNo);
            //支付金钱
            sParaTemp.Add("Amount", Total_Fee);
            //日期
            sParaTemp.Add("Date", strDate);
            //过期时间
            sParaTemp.Add("ExpireTimeSpan", "30");
            //支付结果通知页面
            sParaTemp.Add("MerchantUrl", Config.CMB_PayCallBackUrl);
            //支付结果通知页面参数
            sParaTemp.Add("MerchantPara", MerchantPara);
            //支付完成后
            sParaTemp.Add("MerchantRetUrl", Config.CMB_PayOrderResultUrl);
            //支付完成后参数
            sParaTemp.Add("MerchantRetPara", MerchantRetPara);
            //商户校验码
            sParaTemp.Add("MerchantCode", MerchantCode);
            
            ////建立请求
            return Submit.BuildRequest(sParaTemp, "post", "确认");
        }
    }
}
